package websocket

// RoomManager 定义房间管理器接口
type RoomManager interface {
	// 获取房间（不自动创建）
	GetRoom(id string) *Room

	// 获取游戏房间（不自动创建）
	GetGameRoom(id string) *GameRoom

	// 获取可加入的游戏房间（不创建新房间）
	GetGameRoomForJoin(gameType string) *GameRoom

	// 创建游戏房间
	CreateGameRoom(name, gameType, creatorID, creatorName string, maxUsers int) string

	// 获取或创建可加入的游戏房间

	// 创建房间支持自定义MaxUsers
	CreateRoom(name, creatorID, creatorName string, maxUsers int) string

	// 广播房间列表更新消息到所有客户端
	BroadcastRoomListUpdate()

	// 广播用户加入房间消息到房间列表客户端
	BroadcastUserJoin(roomID, userID, userName string)

	// 广播用户离开房间消息到房间列表客户端
	BroadcastUserLeave(roomID, userID, userName string)
}

// OnlineStatusManagerInterface 定义在线状态管理器接口
type OnlineStatusManagerInterface interface {
	// 用户上线
	UserOnline(userID, userName string)

	// 用户下线
	UserOffline(userID string)

	// 获取用户在线状态
	GetUserStatus(userID string) *UserOnlineStatus

	// 获取好友在线状态列表
	GetFriendsOnlineStatus(userID string) []*UserOnlineStatus
}

// GameService 定义游戏服务接口
type GameService interface {
	// 开始游戏
	StartGame(room *GameRoom)

	// 停止游戏
	StopGame(room *GameRoom)

	// 处理游戏操作
	HandleGameOp(room *GameRoom, userID string, op GameOp)
}

// MessageService 定义消息服务接口
type MessageService interface {
	// 处理消息
	ProcessMessage(client *Client, message Message, context interface{}) error

	// 创建标准消息处理器
	CreateStandardMessageProcessor() *MessageProcessor
}

// BroadcastService 定义广播服务接口
type BroadcastService interface {
	// 向指定用户广播消息
	BroadcastToUser(userID string, msg Message) bool

	// 广播消息到房间
	BroadcastToRoom(room *Room, msg Message)

	// 广播消息到游戏房间
	BroadcastToGameRoom(room *GameRoom, msg Message)
}

// OnlineStatusManagerGetter 定义获取在线状态管理器实例的接口
type OnlineStatusManagerGetter interface {
	// 获取在线状态管理器实例
	GetOnlineStatusManager() *OnlineStatusManager
}